/**
 * Kennari:   Ebba Thora Hvannberg
 * Nemendur:  Hopurinn: Hazir (er sama og "reidi-buinn" a Azeri Azerbaijan)
 * Namskeid:  Hugbunadarverkefni 2.
 * 
 * Tilgangur verksins: Vera eitt tannhjol i eftirfarandi verkefni ad =>
 * 
 *                     Veita notendum snjallsima himneskan frid fyrir
 * 					   hringingum thegar illa stendur a, an thess ad
 *                     notandinn thurfi ad hafa ahyggjur af thvi ad
 *                     stilla simanum a thoegn eda ad stilla simanum
 *                     aftur a hringingu, thegar af stadnum er kominn.
 *
 * Utgafa 1.0 2012/Jan/31 Grofvinnsla tilbuin til notkunar.
 * 
 * Utgafa 2.0 2012/Feb/22 Endurbaeta vinnslu tengdra lista.
 * 
 * Utgafa 3.0 2012/Mar/15 Tilraunir med tengdum listum.
 * 
 * Utgafa 4.0 2012/Apr/06 Utfaerzla loegud og snyrt til.
 * 
 * Utgafa 4.1 2012/Apr/08 Alla adferdir loegud til m.t.t.
 *                        tomri gagnageymslu.
 *                        
 * Utgafa 4.1 2012/Apr/10 Snyrting a thulunni var framkvaemt
 *                        (enginn thula-thrif i theim skilningi). 
 */
//
package is.Hazir.Gagnagrunnur;

import is.Hazir.Exceptions.EkkertStakFinnstException;
import is.Hazir.Exceptions.HringinginErOpinAllStadarException;

import java.util.LinkedList;

public class GagnaVinnsla 
{ 
   // Oll stok eru geymd a eftirfarandi tengda lista (geymsla eda mengi) => 
   public LinkedList<Object> geymsla001 = null; 
   //  
   /** 
    * Klasa-smidurinn. 
    * 
    * Tengdur listi fyrir geymsla001 settur upp => 
    */ 
   public GagnaVinnsla() 
   { 
       /* 
        * Listinn (geymsla) er geymsla001: 
        */ 
       this.geymsla001 = new LinkedList<Object>(); 
   } 
   //
   /** 
    * Tilgangur: Lesa heila geymslu af stokum => 
    * Fyrir:     Tengd lista med stokum. 
    * Eftir:     Afrit af ollum listanum med stokunum, ef til er. 
    * Notkun:    LinkedList<Object> heilGeymsla = lesaGeymslu();    
    * 
    * @return geymsla001, sem er heill listi (geymsla) af stokum 
    */ 
   public LinkedList<Object> lesaGeymslu() 
   { 
       return this.geymsla001; 
   } 
   //
   /**
    * Tilgangur: Vita hvad morg atridi (gogn) eru
    *            geymdar i gagnageymslunni. Serstaklega
    *            med tilliti til adgerd vid ad
    *            eyda gognum. Vegna thess ad thad
    *            verdur ad vera a.m.k. EITT stak
    *            eftir, svo ad "Gamli Hazir", sem
    *            er forritid: GPShnitOgStefna.java,
    *            krassi ekki vegna skjalavinnslu ut i
    *            SD-korti snjallsimans.
    *            
    * Fyrir:     Tengd lista, sem gaeti verid tomur eda med stok.
    *            
    * Eftir:     Nidurstada talningar atrida,
    *            sem geymdar eru i gagnageymslunni.
    * 
    * @return staerdGeymslu, sem er skilabreyta med
    *                        nidurstodu talninga
    *                        gagna, sem geymdar eru,
    *                        sem fyrr segir.
    */
   public int staerdGeymslu()
   {
	   int staerd = 0;
	   staerd = this.geymsla001.size();
	   return staerd;
   } // staerdGeymslu()
   //
   /**
    * Tilgangur: Vita, hvort ad gagnageymslan se tom.
    *            Serstaklega med tilliti til adgerd vid
    *            ad eyda gognum. Vegna thess ad thad
    *            verdur ad vera a.m.k. EITT stak
    *            eftir, svo ad "Gamli Hazir", sem
    *            er forritid: GPShnitOgStefna.java,
    *            krassi ekki vegna skjalavinnslu ut i
    *            SD-korti snjallsimans.
    *            
    * Fyrir:     Tengd lista, sem gaeti verid tomur eda med stok.
    *            
    * Eftir:     Nidurstada um ekkiTom = true EDA ekkitTom = false: 
    * 
    * @return ekkiTom
    */
   public boolean tomGeymsla()
   {
	   boolean ekkiTom = true;
	   ekkiTom = this.geymsla001.isEmpty();
	   return ekkiTom;
   } // tomGeymsla()
   //
   /** 
    * Tilgangur: Geyma eina faerzlu, sem er eitt stak
    *            i tengdum lista, sem er geymsla af stokum.
    *             
    * Fyrir:     Tengd lista, sem gaeti verid tomur eda med stok.
    *  
    * Eftir:     Stakid er geymt a tengda listanum.
    *  
    * Notkun:    geymaStak(64.12, -22.97, "Heiti", 0); 
    *  
    * @param rauntala1 
    * @param rauntala2 
    * @param heitaNafn 
    * @param radNumer 
    */ 
   public void geymaStak(double rauntala1, double rauntala2, String heitaNafn, int radNumer) 
   { 
       Object[] nyttStak = {rauntala1, rauntala2, heitaNafn, radNumer}; 
       // 
       this.geymsla001.addLast(nyttStak); 
       // 
   } // geymaStak ( . . . ) 
   //
   /**
    * Tilgangur: Geyma eina faerzlu, sem er eitt stak i tengdum lista, sem er geymsla af stokum.
    * 
    * Notkun:    geymaStak(eitthvadStak); // af taginu Object[]. 
    * Fyrir:     Tengd lista, sem gaeti verid tomur eda med stok. 
    * Eftir:     Stakid er geymt a tengda listanum. 
    * 
    * @param geymaStakinu af taginu Object[].
    */
   public void geymaStak(Object[] geymaStakinu) 
   {
	   this.geymsla001.addLast(geymaStakinu); 
       // 
   } // geymaStak ( . . . ) 
   // 
   /** 
    * Notkun: Object[] eittStak = lesaStak(numStaks); 
    * Fyrir:  numStaks er med akvedid jakvaett heiltolu-gildi = 0, . . . , n 
    * Eftir1: Skilabreytan "eittStak" inniheldur oll gildi staksins. 
    * Eftir2: Skilabreytan = ekkert (null) => stakid er ekki til a listanum. 
    *  
    * @param numStaks 
    * @return 
    * @throws EkkertStakFinnstException 
    */ 
   public Object[] lesaStak(int numStaks) throws EkkertStakFinnstException 
   { 
       Object[] finnaThettaStak = null;
       //
       Integer staerd = geymsla001.size();
       //
       if (numStaks < staerd) 
       { 
           finnaThettaStak = (Object[])geymsla001.get(numStaks); 
       } 
       else 
       { 
           finnaThettaStak = null; 
           throw new EkkertStakFinnstException();
           //
       } // if else
       // 
       return finnaThettaStak; 
   } // lesaStak( . . . )
   // 
   /** 
    * Thessi adferd er na-kvaemlega sama og lesaStak(...) NEMA AD
    * skilaboda voerpunin (THROWS) er med oennur skilabod, sem
    * er a-bending um ad hringingin er opinn all stadar, VEGNA THESS =>
    * AD BUID ER AD THURRKA UT ALLA STADI, SEM VORU "FRIDARSVAEDI" EDA =>
    * AD ENGINN FRIDARSVAEDI VORU VALIN ENN-THA.
    * 
    * Notkun: Object[] eittStak = lesaGeymtSvaediStak(numStaks); 
    * Fyrir:  numStaks er med akvedid jakvaett heiltolu-gildi = 0, . . . , n 
    * Eftir1: Skilabreytan "eittStak" inniheldur oll gildi staksins. 
    * Eftir2: Skilabreytan = ekkert (null) => stakid er ekki til a listanum. 
    *  
    * @param numStaks 
    * @return 
    * @throws EkkertStakFinnstException 
    */ 
   public Object[] lesaGeymtSvaediStak(int numStaks) throws HringinginErOpinAllStadarException 
   { 
       Object[] finnaThettaStak = null;
       //
       Integer staerd = geymsla001.size();
       //
       if (numStaks < staerd) 
       { 
           finnaThettaStak = (Object[])geymsla001.get(numStaks); 
       } 
       else 
       { 
           finnaThettaStak = null; 
           throw new HringinginErOpinAllStadarException();
           //
       } // if else
       // 
       return finnaThettaStak; 
   } // lesaStak( . . . ) 
   // 
   /** 
    * Undirbuningur fyrir vid-fangs-breytu: 
    *             Object[] eittStak = {64.12, -21.97, "RK", 1}; 
    * Notkun: boolean stakidFannst = finnaStak(eittStak); 
    * Fyrir:  Tengd lista med a.m.k. eitt stak er til 
    * Eftir1: Skilabreytan inniheldur rok-gildi = sannur (true) ef stakid er til. 
    * Eftir2: Skilabreytan inniheldur rok-gildi = o-satt (false) => ekkert stak. 
    *  
    * @param finnaStakinu 
    * @return 
    * @throws stakEkkiTilException  
    */ 
   public boolean finnaStak(Object[] finnaStakid) throws EkkertStakFinnstException 
   { 
       boolean  stakidFannst    = false; 
       int      numStaks        =     0; 
       Object[] finnaThettaStak =  {0.0, 0.0, "athugaBetur", 0}; 
       // 
       Integer staerd = geymsla001.size(); 
       // 
       while ((numStaks < staerd) && (!(beraSamanStoek(finnaThettaStak, finnaStakid, -1)))) 
       {
    	   finnaThettaStak = (Object[])geymsla001.get(numStaks); 
           numStaks++; 
       } 
       // 
       if(beraSamanStoek(finnaThettaStak, finnaStakid, -1)) 
       { 
           stakidFannst = true; 
       } 
       else 
       {
           throw new EkkertStakFinnstException(); 
       } // if else 
       // 
       return stakidFannst; // eda ekki. 
       //// 
   } // boolean finnaStak( . . . ) 
   //
   /** 
    * Tilgangur: Finna akv. stak af tengdum lista ut fra breiddar og lengdargradum. 
    * Fyrir:     Tengd lista med a.m.k. eitt stak er til 
    * Eftir 1:   Stakid er til      => skilagildi = true. 
    * Eftir 2:   Stakid er ekki til => skilagildi = false. 
    * Notkun:    boolean stakidErTil = finnaGeymdGPShnit(64.12, -22.97); 
    *  
    * @param rauntala1, sem er breiddar-gradur a DD formi = 64.12, sem daemi. 
    * @param rauntala2, sem er breiddar-gradur a DD formi = -21.97, sem daemi. 
    * @return er skilabreyta, sem er SONN ef ad GPS hnitid = GPS hnitid i gagnageymslu 
    *                                                   i vinnslu-minni snjallssimans. 
    * @throws stakEkkiTilException  
    */ 
   public boolean finnaStakGPShnits(double rauntala1, double rauntala2, String heitaNafn, int radNumer) 
       throws EkkertStakFinnstException 
   { 
	   boolean  stakidFannst    = false;
	   int      numStaks        =     0;
	   Object[] finnaThettaStak =  {0.0, 0.0, "", 0};
	   Object[] finnaStakid     = {rauntala1, rauntala2, heitaNafn, radNumer};
	   // 
	   Integer staerd = geymsla001.size(); 
	   // 
	   while ((numStaks < staerd) && (!(beraSamanStoek(finnaThettaStak, finnaStakid, 2)))) 
	   {
		   finnaThettaStak = (Object[])geymsla001.get(numStaks); 
		   numStaks++; 
	   } // while 
	   // 
	   if(beraSamanStoek(finnaThettaStak, finnaStakid, 2)) 
	   { 
		   stakidFannst = true;
	   } 
	   else 
	   {
		   throw new EkkertStakFinnstException(); 
	   } // if else 
	   // 
	   return stakidFannst; // eda ekki. 
	   //	 
   } // boolean finnaStakGPShnits( . . . ) 
   //
   public boolean finnaStakGPShnits(Object[] finnaStakid) 
       throws EkkertStakFinnstException 
   { 
	   boolean  stakidFannst    = false;
	   int      numStaks        =     0;
	   Object[] finnaThettaStak =  {0.0, 0.0, "", 0};
	   // 
	   Integer staerd = geymsla001.size(); 
	   // 
	   while ((numStaks < staerd) && (!(beraSamanStoek(finnaThettaStak, finnaStakid, 2)))) 
	   {
		   finnaThettaStak = (Object[])geymsla001.get(numStaks); 
		   numStaks++; 
	   } // while 
	   // 
	   if(beraSamanStoek(finnaThettaStak, finnaStakid, 2)) 
	   { 
		   stakidFannst = true;
	   } 
	   else 
	   {
		   throw new EkkertStakFinnstException(); 
	   } // if else 
	   // 
	   return stakidFannst; // eda ekki. 
	   //	 
   } // boolean finnaStakGPShnits( . . . ) 
   //
   // 
   /** 
    * Notkun: boolean stakidFannst = finnaStak(64.12, -21.97, "RK", 1); 
    * Fyrir:  Tengd lista med a.m.k. eitt stak er til 
    * Eftir1: Skilabreytan inniheldur rok-gildi = sannur (true) ef stakid er til. 
    * Eftir2: Skilabreytan inniheldur rok-gildi = o-satt (false) => ekkert stak. 
    *  
    * @param rauntala1, sem er breiddar-gradur a DD formi = 64.12, sem daemi. 
    * @param rauntala2, sem er breiddar-gradur a DD formi = -21.97, sem daemi. 
    * @param heitaNafn t.d. "VR2" eda annad heiti t.d. "Prikid". 
    * @param radNumer, t.d. 1, 2, . . . N, sem nytizt i tengslum vid sjalfgefin nofn = "Heiti" 
    *  
    * @return er skilabreyta, sem er SONN ef ad GPS hnitid = GPS hnit med ollum atridum 
    *              fra GPS hnitinu sjalfu (breiddar og lengdar-gradur), heiti stadarins og 
    *              radnumer, sem a ad fylgja sjalfgefins nafns - allar thessar folgnar 
    *              breytur, sem geymdar eru i gagnageymslu i vinnslu-minni snjallssimans. 
    * @throws stakEkkiTilException  
    */
   //
   public boolean finnaStakSer(double rauntala1, double rauntala2, String heitaNafn, int radNumer) 
       throws EkkertStakFinnstException 
   { 
	   boolean  stakidFannst    = false;
	   int      numStaks        =     0;
	   Object[] finnaThettaStak =  {0.0, 0.0, "", 0};
	   Object[] finnaStakid     = {rauntala1, rauntala2, heitaNafn, radNumer};
	   // 
	   Integer staerd = geymsla001.size(); 
	   // 
	   while ((numStaks < staerd) && (!(beraSamanStoek(finnaThettaStak, finnaStakid, -1)))) 
	   {
		   finnaThettaStak = (Object[])geymsla001.get(numStaks); 
		   numStaks++; 
	   } // while 
	   // 
	   if(beraSamanStoek(finnaThettaStak, finnaStakid, -1)) 
	   { 
		   stakidFannst = true;
	   } 
	   else 
	   {
		   throw new EkkertStakFinnstException(); 
	   } // if else 
	   // 
	   return stakidFannst; // eda ekki. 
	   //	 
   } // boolean finnaStak( . . . ) 
   //
   // 
   /** 
    * Notkun: int numStakFannst = finnaStak(64.12, -21.97, "RK", 1); 
    * Fyrir:  Tengd lista med a.m.k. eitt stak er til 
    * Eftir1: Skilabreytan inniheldur heiltolu gildi ef stakid er til => t.d. 2 
    * Eftir2: Skilabreytan inniheldur heiltolu gildi = -1 ef ekkert stak er til. 
    *  
    * @param rauntala1, sem er t.d. fleytitolu med gildi 
    * @param rauntala2 
    * @param heitaNafn 
    * @param radNumer 
    * @return 
    * @throws stakEkkiTilException  
    */
    //
	public int finnaNumStakGPSser(double rauntala1, double rauntala2, String heitaNafn, int radNumer) 
	       throws EkkertStakFinnstException 
	{ 
   		int      numStaks        =     0;
   		Object[] finnaThettaStak =  {0.0, 0.0, "", 0};
   		Object[] finnaStakid     = {rauntala1, rauntala2, heitaNafn, radNumer};
   		//
   		Integer staerd = geymsla001.size(); 
   		//
   		while ((numStaks < staerd) && (!(beraSamanStoek(finnaThettaStak, finnaStakid, 2)))) 
   		{
   			finnaThettaStak = (Object[])geymsla001.get(numStaks); 
   			numStaks++; 
   		} 
   		// 
   		if(beraSamanStoek(finnaThettaStak, finnaStakid, 2)) 
   		{ 
   			numStaks--; 
   		} 
   		else 
   		{
   			throw new EkkertStakFinnstException(); 
   		} // if else 
   		// 
   		return numStaks; // eda ekki. 
   		// 
	} // boolean finnaStak( . . . ) 
   	//
   	// SAMA OG OFAN NEMA MED ADRA VIDFANGS-BREYTU.
   	// TODO LAGFAERT NUNA EFTIR AD PROFA =>
   	/**
   	 * Fyrir: Tengd lista med a.m.k. eitt stak er til
   	 * 
   	 * Eftir: Nidurstoedu um numer staks ut fra uppl. um stak.
   	 * 
   	 * @param finnaStakid
   	 * @return
   	 * @throws EkkertStakFinnstException
   	 */
   	public int finnaNumStakGPSser(Object[] finnaStakid) 
	       throws EkkertStakFinnstException 
	{ 
   		int      numStaks        =     0;
   		Object[] finnaThettaStak =  {0.0, 0.0, "", 0};
   		//
   		Integer staerd = geymsla001.size(); 
   		// 
   		while ((numStaks < staerd) && (!(beraSamanStoek(finnaThettaStak, finnaStakid, 2)))) 
   		{
   			finnaThettaStak = (Object[])geymsla001.get(numStaks); 
   			numStaks++; 
   		} // while 
   		// 
   		if(beraSamanStoek(finnaThettaStak, finnaStakid, 2)) 
   		{ 
   			numStaks--; 
   		} // if 
   		else 
   		{
   			//throw new EkkertStakFinnstException();
   			numStaks = -1;
   		} // if else 
   		// 
   		return numStaks; // eda ekki. 
   		// 
	} // boolean finnaStak( . . . ) 
   	//
   	// TODO GANGA FRA BOKHALDI HJER AD OFAN
   	//
   	// TODO LAGFAERT NUNA EFTIR AD PROFA =>
   	/**
   	 * Fyrir: Tengd lista med a.m.k. eitt stak er til
   	 * 
   	 * Eftir: Nidurstoedu um numer staks ut fra uppl. um stak.
   	 * 
   	 * @param rauntala1
   	 * @param rauntala2
   	 * @param heitaNafn
   	 * @param radNumer
   	 * @return
   	 * @throws EkkertStakFinnstException
   	 */
   	public int finnaNumStakSer(double rauntala1, double rauntala2, String heitaNafn, int radNumer) 
	       throws EkkertStakFinnstException 
	{ 
   		int      numStaks        =     0;
   		Object[] finnaThettaStak =  {0.0, 0.0, "", 0};
   		Object[] finnaStakid     = {rauntala1, rauntala2, heitaNafn, radNumer};
   		//
   		Integer staerd = geymsla001.size(); 
   		//
   		while ((numStaks < staerd) && (!(beraSamanStoek(finnaThettaStak, finnaStakid, -1)))) 
   		{
   			finnaThettaStak = (Object[])geymsla001.get(numStaks); 
   			numStaks++; 
   		} 
   		// 
   		if(beraSamanStoek(finnaThettaStak, finnaStakid, -1)) 
   		{ 
   			numStaks--; 
   		} 
   		else 
   		{
   			throw new EkkertStakFinnstException(); 
   		} // if else 
   		// 
   		return numStaks; // eda ekki. 
   		// 
	} // boolean finnaStak( . . . ) 
   	//
   	// SAMA OG OFAN NEMA MED ADRA VIDFANGS-BREYTU.
   	// TODO LAGFAERT NUNA EFTIR AD PROFA =>
   	/**
   	 * Fyrir: Tengd lista med a.m.k. eitt stak er til
   	 * 
   	 * Eftir: Nidurstoedu um numer staks ut fra uppl. um stak.
   	 * 
   	 * @param finnaStakid
   	 * @return
   	 * @throws EkkertStakFinnstException
   	 */
   	public int finnaNumStakSer(Object[] finnaStakid) 
	       throws EkkertStakFinnstException 
	{ 
   		int      numStaks        =     0;
   		Object[] finnaThettaStak =  {0.0, 0.0, "", 0};
   		//
   		Integer staerd = geymsla001.size(); 
   		// 
   		while ((numStaks < staerd) && (!(beraSamanStoek(finnaThettaStak, finnaStakid, -1)))) 
   		{
   			finnaThettaStak = (Object[])geymsla001.get(numStaks); 
   			numStaks++; 
   		} // while 
   		// 
   		if(beraSamanStoek(finnaThettaStak, finnaStakid, -1)) 
   		{ 
   			numStaks--; 
   		} // if 
   		else 
   		{
   			throw new EkkertStakFinnstException(); 
   		} // if else 
   		// 
   		return numStaks; // eda ekki. 
   		// 
	} // boolean finnaStak( . . . )
   	//
   	// Afgreitt 2012/Feb/26/19-00 
    // Uppfaert 2012/Marz/03/18-15
    /** 
     * Notkun:    eydaAkvedidStak(64.12, -21.97, "RK", 1);  
     * Tilgangur: Eyda einu staki af tengdum lista og tengja fram hja. 
     * Fyrir:     Gagnageymslu med a.m.k. eitt stak (gagn) 
     * Eftir 1:   Eitt stak af tengdum lista er horfid => skilagildi = true (stakid var til). 
     * Eftir 2:   Ekkert stak af listanum er horfid => skilagildi = false (stakid var ekki til). 
     *  
     * @param rauntala1 
     * @param rauntala2 
     * @param heitaNafn 
     * @param radNumer 
     * @throws stakEkkiTilException  
     */
   	public void eydaAkvedidStak(double rauntala1, double rauntala2, String heitaNafn, int radNumer) 
   			throws EkkertStakFinnstException 
    { 
   		int      numStaks        =    -1; 
        boolean  stakidFannst    = false; 
        // 
        stakidFannst = finnaStakGPShnits(rauntala1, rauntala2, heitaNafn, radNumer); 
        // 
        if (stakidFannst) 
        { 
        	numStaks = finnaNumStakGPSser(rauntala1, rauntala2, heitaNafn, radNumer); 
            geymsla001.remove(numStaks); // eyda einu staki og tengja fram hja. 
        } // if
        else
   	 	{
        	throw new EkkertStakFinnstException(); 
   	 	} // if else
    } // boolean eydaStakSer( . . . ) 
    //
    // ONNUR UT-GAFA AF SAMA.
    //
    /**
     * Notkun:    eydaAkvedidStak(stakTilAdEyda);  
     * Tilgangur: Eyda einu staki af tengdum lista og tengja fram hja. 
     * Fyrir:     Gagnageymslu med a.m.k. eitt stak (gagn) 
     * Eftir 1:   Eitt stak af tengdum lista er horfid => skilagildi = true (stakid var til). 
     * Eftir 2:   Ekkert stak af listanum er horfid => skilagildi = false (stakid var ekki til). 
     * 
     * @param finnaStakid
     * @throws EkkertStakFinnstException
     */
     public void eydaAkvedidStak(Object[] finnaStakid) 
             throws EkkertStakFinnstException 
     { 
    	 int      numStaks        =    -1; 
    	 boolean  stakidFannst    = false; 
    	 // 
    	 stakidFannst = finnaStakGPShnits(finnaStakid); 
    	 // 
    	 if (stakidFannst) 
    	 { 
    		 numStaks = finnaNumStakGPSser(finnaStakid); 
    		 //if(numStaks >= 0) geymsla001.remove(numStaks); // eyda einu staki og tengja fram hja.
    		 eydaStakNum(numStaks);
    	 } // if
    	 else
    	 {
    		 throw new EkkertStakFinnstException(); 
    	 } // if else
    	 // 
     } // boolean eydaStakSer( . . . ) 
     //
     /**
      * Fyrir: Gagnageymslu med a.m.k. eitt stak (gagn)
      * 
      * Eftir: Gagnageymslan er med eitt stak faerri eda ordin tom.
      * 
      * @param numStaks
      * @throws EkkertStakFinnstException
      */
     public void eydaStakNum(int numStaks)
    		 throws EkkertStakFinnstException
     { 
    	 try
    	 {
    		 geymsla001.remove(numStaks); // eyda einu staki og tengja fram hja.
    	 }
    	 catch(NullPointerException ne) 
         { 
      	   throw new EkkertStakFinnstException(); 
         } 
         catch(Exception e) 
         { 
      	   throw new EkkertStakFinnstException(); 
         } // try catch
     } // boolean eydaStakSer( . . . )
     //
     /**
      * Fyrir: Gagnageymslu med a.m.k. eitt stak (gagn)
      * 
      * Eftir: Gagnageymslan er med eitt stak faerri eda ordin tom.
      * 
      * @throws EkkertStakFinnstException
      */
     public void eydaNyjastaStakinu()
     		throws EkkertStakFinnstException
     {
    	 try
    	 {
    		 geymsla001.removeLast();
    	 }
    	 catch(NullPointerException ne) 
         { 
      	   throw new EkkertStakFinnstException(); 
         } 
         catch(Exception e) 
         { 
      	   throw new EkkertStakFinnstException(); 
         } // try catch
     } // eydaNyjastaStakinu()
    
     //
     /** 
      * Stada:     Afgreitt og profad 2012/Feb/25. 
      *  
      * Notkun:    eydaOllStok(); 
      * Tilgangur: Eyda ollum stokum af tengdum lista. 
      * Fyrir:     Tengd lista med stokum. 
      * Eftir 1:   Oll stok af tengdum lista eru horfin => skilagildi = true (stok voru til). 
      * Eftir 2:   Ekkert stak af listanum er horfid => skilagildi = false (e.t.v. tomur listi). 
      *  
      * @throws EkkertStakFinnstException 
      */ 
     public void eydaOllStok() throws EkkertStakFinnstException 
     { 
    	 // 
    	 int      numStaks      =     0; 
    	 int      staerdGeymslu = geymsla001.size(); 
    	 // 
    	 if (staerdGeymslu > 0) 
    	 { 
    		 for(numStaks = staerdGeymslu - 1; numStaks >= 0; numStaks--) 
    		 { 
   				 geymsla001.remove(numStaks); 
    		 } // for ( . . . ) 
    	 } // if (staerdGeymslu > 0) 
    	 else 
    	 { 
    		 throw new EkkertStakFinnstException(); 
    	 } // if else
    	 // 
     } // boolean eydaStakSer( . . . ) 
     //
     /** 
      * Stada:    Afgreitt og profad 2012/Feb/26 
      * 
      * Tilgangur: Samanburdur a hlutum med akvedin fjolda staka => 
      *            Object[] med o-tiltekna fjolda staka af taginu: Object.  
      *  
      * Undirbua: Object[] stak01 og stak02 og 
      *           hamarmsLen = -1 gefur enginn a-hrif EN hamarksLen = 2, sem daemi 
      *           => hefur i for med sjer ad => adeins 2 fyrstu stokin i hlutunum 
      *           eru bornar saman, sem daemi. 
      *               
      * Notkun: boolean samanburdur = beraSamanStoek(stak01, stak02, hamarksNum); 
      * Fyrir:  Vidfangsbreytur eru med gildi i formi vigurs a hluta-tagi. 
      * Eftir:  Skilabreytan "samanburdur" er med nidurstodu samanburdar 
      *         "vigra" hlutana tveggja, stak fyrir stak i formi rokbreyta, 
      *         sem annars vegar tekur gildinu SONN = true EDA O-SONN = false. 
      *  
      * @param hlutur01 
      * @param hlutur02 
      * @param hamarksLen 
      * @return 
      * @throws stakEkkiTilException  
      */ 
     public boolean beraSamanStoek(Object[] stak01, Object[] stak02, int hamarksNum) 
                     throws EkkertStakFinnstException 
     { 
    	     Boolean b = false;
    	     //
             Double  r1 = 0.0;
             Double  s1 = 0.0;
             String  t1 =  "";
             Integer u1 =   0;
             //
             Double  r2 = 0.0;
             Double  s2 = 0.0;
             String  t2 =  "";
             Integer u2 =   0;
             //
             r1 = (Double) stak01[0];
             s1 = (Double) stak01[1];
             t1 = (String) stak01[2];
             u1 = (Integer)stak01[3];
             //
             r2 = (Double) stak02[0];
             s2 = (Double) stak02[1];
             t2 = (String) stak02[2];
             u2 = (Integer)stak02[3];
             //
             if      (hamarksNum < 0) b = ((r1.equals(r2))&&(s1.equals(s2))&&(t1.equals(t2))&&(u1.equals(u2)));
             else if (hamarksNum > 0) b = ((r1.equals(r2))&&(s1.equals(s2)));
             //                                                      \\
			return b;
		   //                                                          \\
     	} // beraSamanStoek ( . . . )                                   \\
         //                                                              \\
        //-  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -\\
       // -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - \\
       // -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - \\
       // -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - \\
       // -  -  -  U N D I R B U A    S K J A L A - V I N N S L U  -  -  - \\ 
       /* 
        * Undirbua vistun GPS hnita med nofn og rad-numeri => ut a SD-korti => 
        */ 
       // 
       /** 
        * Stada:  Afgreitt og profad 2012/Feb/24 
        *  
        * Notkun: String strengur = stakUtiStrengjabreytu(objectLengja); 
        * Fyrir:  Vidfangsbreytan er med gildi. 
        * Eftir:  Strengjagildi skilin eftir i skilabreytu til daemis String strengur med 
        *         tilheyrandi staka-gildi med thattaskilum og kennileiti. 
        *         rauntolur og fleira eru ornar komnar yfir a strengjatagi => 
        *         skilaBreyta = *$rauntala1#rauntala2#heiti#radNr#* 
        *         Thetta er eitt daemi um skilagildi skilabrytunnar a strengjatagi 
        *         fyrir EITT STAK. 
        *         Stjarnan, sem byrjunar og enda-takn fyrir STAKA-ROD, kemur i naestu adferd: 
        *         ollStokUtiStrengjaBreytu, sem safna saman oll stok a einum streng med 
        *         STJARNA, sem ENDA-TAKN, sja nedar. 
        *  
        * @param lesaStak 
        * @return 
     * @throws EkkertStakFinnstException 
        */ 
       public String stakUtiStrengjabreytu(Object[] eittStak) throws EkkertStakFinnstException 
   { 
               String skilaBreyta  = ""; 
               // 
               try  
               { 
                   String nyrFaerzla   = "$"; 
                   String rauntala1    = eittStak[0].toString(); 
                   String kenniLeiti01 = "#"; 
                   String rauntala2    = eittStak[1].toString(); 
                   String kenniLeiti02 = "#"; 
                   String heiti        = eittStak[2].toString(); 
                   String kenniLeiti03 = "#"; 
                   String radNr        = eittStak[3].toString(); 
                   String kenniLeiti04 = "#"; 
                   // 
                   //            Kennileiti     Gogn 
                   skilaBreyta = nyrFaerzla   + rauntala1 + 
                                 kenniLeiti01 + rauntala2 + 
                                 kenniLeiti02 + heiti     + 
                                 kenniLeiti03 + radNr     + 
                                 kenniLeiti04; 
               } 
               catch(NullPointerException ne) 
               { 
            	   throw new EkkertStakFinnstException(); 
               } 
               catch(Exception e) 
               { 
            	   throw new EkkertStakFinnstException(); 
               } // try catch 
               //              
           // 
           return skilaBreyta; 
   } // stakUtiStrengjabreytu( . . . ) 
       // 
       /** 
        * Stada:  Afgreitt 2012/Feb/24 
        * Ny st:  Uppfaert 2012/Marz/03
        *  
        * Notkun: String strengur = ollStokUtiStrengjaBreytu(); 
        * Fyrir:  Oll inntaksgildi eru fengin af geymslunni "geymsla001". 
        * Fasta 
        * yding:  Lesid er ur geymslunni stak fyrir stak og stokin umbreytt yfir a 
        *         strengjaformi a-medan ad rok-breytan i for-lykkjunni: 
        *         "i < staerdGeymslu" er SONN. 
        *         Yfirfaerzla staka yfir a strengjaformi er med eftirfarandi snidi, DAEMI: 
        *         Byrjunar-takn (stjarna) + byrjun-faerzlu (Dollar) + 
        *         stak a strengjaformi (vid-eigandi ASCII takn) + samskeytu-takn (milla = #) + 
        *         stak a strengjaformi (vid-eigandi ASCII takn) + samskeytu-takn (milla) + 
        *         stak a strengjaformi (vid-eigandi ASCII takn) + samskeytu-takn (milla) + 
        *         enda-takn (stjarna).
        *         
        *         Eftirfarandi daemi synir skilabreytu fyrir TVO STOK => 
        * 
        *         *$rauntala1#rauntala2#heiti#radNr$rauntala1#rauntala2#heiti#radNr* 
        * 
        * Eftir:  Strengjagildi skilin eftir i skilabreytu til daemis String strengur med 
        *         tilheyrandi staka-gildi med thattaskilum og kennileiti, sem fyrr segir. 
        *         Rauntolur og fleira eru ordnar komnar yfir a strengjatagi => 
        *         skilaBreyta = *$rauntala1#rauntala2#heiti#radNr$rauntala1#rauntala2#heiti#radNr#* 
        * 
        *         Thetta er eitt daemi um skilagildi skilabrytunnar a strengjatagi fyrir TVOE STOK, 
        *         sem daemi, sem fyrr segir. 
        *  
        * @return skilabreyta af taginu "strengur" = String, eins og fyrr segir. 
        * @throws EkkertStakFinnstException 
        */ 
       public String ollStokUtiStrengjaBreytu() throws EkkertStakFinnstException 
       { 
    	   Object[] stak      = null; 
    	   String skilaBreyta = ""; 
    	   int staerdGeymslu  = geymsla001.size(); 
    	   int i              = 0; 
    	   // 
    	   if (staerdGeymslu > 0) 
    	   { 
    		   /* Forskilyrdi: Tomur strengur = skilaBreyta og
    		                   staerd geymslu > 0.
    		    */
    		   skilaBreyta = skilaBreyta + "*"; // Upphafs-merki.
    		   /*
    		      Forskilyrdi:   Tomur strengur = skilaBreyta og
    		                     staerd geymslu > 0.
    		      Eftirskilyrdi: Fullbuinn streng, sem fulltrui
    		     				 gagna tengdra lista i verkinu
    		                     til utprentunar eftir ad
    		                     endamerkinu = "*" hafi verid
    		                     baett vid eftir "for" lykkjunni:
    		    */
    		   for(i = 0; i < staerdGeymslu; i++) 
    		   { 
    			   /* Fastayrding: Rokbreyta for lykkjunnar er SONN =>
    			     			   Eitt stak med upplysingum a
    			                   strengja-formi baetist vid
    			                   skilabreytuna sem "perlur" a streng =>
    			    */
   				   stak = this.lesaStak(i); 
   				   skilaBreyta = skilaBreyta + stakUtiStrengjabreytu(stak); 
    		   } // for ( . . . ) 
    		   // Enda-takn = stjarna => 
    		   skilaBreyta = skilaBreyta + "*"; // Enda-merki.
    		   /* Eftirskilyrdi: Nuna er skilabreytan tilbuinn til
    		                     afhendingar, sem fulltrui allra
    		                     GPS upplysinga til skjalfestunar
    		                     a SD-korti snjall-simans.
    		    */
    	   } // if (i > 0) 
    	   else 
    	   { 
    		   skilaBreyta = "*";
    		   throw new EkkertStakFinnstException(); 
    	   } // if (i > 0) else 
    	   // 
    	   return skilaBreyta; 
           // 
       } // ollStokUtiStrengjaBreytu() 
       // 
       /** 
        * String  lesaSkjal = "*$64.12#-21.97#RK#1#*"; // Sem syni-daemi. 
        * Notkun: lesaGPSstillingar(lesaSkjal); 
        * Fyrir:  Til er skjal a SD-korti snjallsimans. 
        * Eftir:  Innihald skjalsins er kominn i tengdum listum i 
        *         vinnslu-minni snjallsimans til videigandi notkunnar. 
        *  
        * @param inntaksStrengur, sem er inntaks-strengur ur skjali fra SD-korti 
        */ 
       public void lesaGPSstillingar(String inntaksStrengur) 
       { 
    	   boolean safnaStafi    = false; 
    	   String safnStrengur   = ""; 
    	   char einnBokstafur    = '-'; 
    	   char[] lesaStreng; 
    	   int  lengdStafaLengju = 0; 
    	   int  teljari  = 0; 
    	   int  ordNum   = 0; 
    	   int  lengdStr = 0; 
    	   // 
    	   Double rauntala01  = 0.0; 
    	   Double rauntala02  = 0.0; 
    	   String heitiStadar =  ""; 
    	   int    radnumer    =   0; 
    	   // 
    	   lengdStr = inntaksStrengur.length(); 
    	   // 
    	   lesaStreng = new char[lengdStr]; 
    	   lesaStreng = inntaksStrengur.toCharArray(); 
    	   // 
    	   lengdStafaLengju = lesaStreng.length; 
    	   // 
    	   // Taema gomul gogn: 
    	   if (lengdStafaLengju > 0) this.geymsla001 = new LinkedList<Object>(); 
    	   /* 
    	      Eingongu til thess ad lesa gogn:      
    	      Lesa og skrifa gogn ut i gagnageymslu. 
    	      Eftirfarandi fyrirkomulag les af textaskra 
    	      fra simakorti (SD card)staf fyrir staf og 
    	      geyma strengnum i formi staf fyrir staf (char[]) 
    	      og skila heilan streng ut i skilabreytuna
    	    */
    	   while (teljari < lengdStafaLengju) 
    	   { 
    		   einnBokstafur    = lesaStreng[teljari]; 
    		   // 
    		   if(einnBokstafur == '$') 
    		   { 
    			   // Nyr faerzla byrjar => 
    			   rauntala01   = 0.0; 
    			   rauntala02   = 0.0; 
    			   heitiStadar  =  ""; 
    			   radnumer     =   0; 
    			   safnStrengur = ""; 
    			   safnaStafi = true; 
    			   ordNum = 1; 
    		   } 
    		   else if(einnBokstafur == '#') 
    		   { 
    			   // Safna i alla breytur fyrir faerzluna => 
    			   if     (ordNum == 1)    rauntala01  = (double)Double.parseDouble(safnStrengur); 
    			   else if(ordNum == 2)    rauntala02  = (double)Double.parseDouble(safnStrengur); 
    			   else if(ordNum == 3)    heitiStadar = (String)safnStrengur; 
    			   else if(ordNum == 4) 
    			   { 
    				   radnumer    = (int)Integer.parseInt(safnStrengur); 
    				   geymaStak(rauntala01, rauntala02, heitiStadar, radnumer); 
    			   } // if else 
    			   // 
    			   safnStrengur =  ""; 
    			   safnaStafi = true; 
    			   // Naesta faerzla tekin fyrir upp ad 4. 
    			   ordNum++; 
    		   }// if else 
    		   else if(einnBokstafur == '*') 
    		   { 
    			   // Nuna aetti ad vera buid ad safna i ollum faerzlum fyrir GPS. 
    			   rauntala01   = 0.0; 
    			   rauntala02   = 0.0; 
    			   heitiStadar  =  ""; 
    			   radnumer     =   0; 
    			   safnStrengur =  ""; 
    			   ordNum = 1; 
    			   safnaStafi = false; 
    		   }// if else 
    		   else 
    		   { 
    			   if(safnaStafi) 
    			   { 
    				   safnStrengur = safnStrengur + lesaStreng[teljari]; 
    			   } // if 
    		   } // if else 
    		   // 
    		   teljari++; 
    		   //      
    	   } // while (n < lengdStr) 
    	   // 
    	   // Tilbuinn streng med ollu skjalinu i belg og bidu a strengja tagi: 
    	   // return uttaksStrengur; 
       } // lesaGPSstillingar( . . . ) 
       // 
} // class GagnaVinnsla. 
//
